home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / mus / edit / AlgoRhythms.lha / AlgoRhythms / Source / menus.c < prev    next >
C/C++ Source or Header  |  1994-11-25  |  5KB  |  193 lines

  1. /* Menus.c
  2.     Copyright (c) 1990,1991,1992,1993 by Thomas E. Janzen
  3.     All Rights Reserved
  4.  
  5.     THIS SOFTWARE IS FURNISHED FREE OF CHARGE FOR STUDY AND USE AND MAY
  6.     BE COPIED ONLY FOR PERSONAL USE OR COMPLETELY AS OFFERED WITH NO
  7.     CHANGES FOR FREE DISTRIBUTION.  NO TITLE TO AND OWNERSHIP OF THE
  8.     SOFTWARE IS HEREBY TRANSFERRED.  THOMAS E. JANZEN ASSUMES NO 
  9.     RESPONSIBILITY FOR THE USE OR RELIABILITY OF THIS SOFTWARE.
  10.     
  11.     Thomas E. Janzen
  12.     208A Olde Derby Road
  13.     Norwood, MA  02062-1761
  14.     (617)769-7733
  15. */
  16. /*
  17. **  FACILITY:
  18. **
  19. **    AlgoRhythms music improviser on Commodore (TM) Amiga (TM)
  20. **    compiled with SAS/C Amiga Compiler 6.50 
  21. **
  22. **  ABSTRACT:
  23. **
  24. **    Menus.c manages menu set-up and interaction.
  25. **
  26. **  AUTHORS: Thomas E. Janzen
  27. **
  28. **  CREATION DATE:    26-MAR-1990
  29. **
  30. **  MODIFICATION HISTORY:
  31. **    DATE    NAME    DESCRIPTION
  32. **    19 OCT 91 T. Janzen add menu name niceties.
  33. **  4 Jan 92 TEJ  last changes for 2.0
  34. **  2 Feb 92 TEJ use scale_list.h
  35. **  13 oct 93 TEJ Use gadtools menus.
  36. **--
  37. */
  38.  
  39. #include <stdio.h>
  40. #include <exec/types.h>
  41. #include <intuition/intuition.h>
  42. #include <intuition/intuitionbase.h>
  43. #include <clib/intuition_protos.h>
  44. #include <proto/intuition.h>
  45. #include <graphics/text.h>
  46. #include <proto/dos.h>
  47. #include <proto/graphics.h>
  48. #include <proto/exec.h>
  49. #include <proto/gadtools.h>
  50. #include <clib/gadtools_protos.h>
  51. #include <libraries/gadtools.h>
  52. #include "Window.h"
  53. #include "AlgoRhythms.h"
  54. #include "scale_list.h"
  55. #include "Menus.h"
  56.  
  57. static struct MenuItem *record_item; /* need to clear check on record */
  58. static struct Menu *menuStrip;
  59.  
  60. static struct NewMenu newmenus[] =
  61. {
  62.     /* type, label, commkey, flags, mutualexc, userdata */
  63.     { NM_TITLE, "Project",            0, 0, 0, 0},
  64.     {   NM_ITEM, "Play",            "P", 0, 0, 0},
  65.     {   NM_ITEM, "Stop",            "S", 0, 0, 0},
  66.     {   NM_ITEM, "Continue",        "C", 0, 0, 0},
  67.     {   NM_ITEM, "Load Form...",    "L", 0, 0, 0},
  68.     {   NM_ITEM, "Save Form...",    "F", 0, 0, 0},
  69.     {   NM_ITEM, "Record",          "R",CHECKIT | MENUTOGGLE, 0, 0},
  70.     {   NM_ITEM, "Erase",           "E", 0, 0, 0},
  71.     {   NM_ITEM, "Save MIDI...",    "M", 0, 0, 0},
  72.     {   NM_ITEM, "About",           "A", 0, 0, 0},
  73.     {   NM_ITEM, "Quit",            "Q", 0, 0, 0},
  74.     { NM_TITLE, "Music",              0, 0, 0, 0},
  75.     {   NM_ITEM, "Redraw",          "D", 0, 0, 0},
  76. #if 0
  77.     {   NM_ITEM, "Form",            "B", 0, 0, 0},
  78.     {   NM_ITEM, "Voice",           "V", 0, 0, 0},
  79.     {   NM_ITEM, "Orchestra",       "O", 0, 0, 0},
  80.     {   NM_ITEM, "Colors",          "G", 0, 0, 0},
  81. #endif
  82.     {NM_END,0,0,0,0,0}
  83. };
  84.  
  85. void init_menu(void)
  86. /*
  87. ** FUNCTIONAL DESCRIPTION:
  88. **  fills out voice menu and installs all menus
  89. **
  90. ** DESIGN:
  91. **  ROUTINE
  92. **  : FOR voice = 0 to <MAXVOICE
  93. **  : : Fill out a voice menu item
  94. **  : ENDFOR
  95. **  : SetMenuStrip
  96. **  : OnMenu()
  97. **  ENDROUTINE
  98. */
  99. {
  100.     menuStrip = CreateMenus(newmenus, TAG_END);
  101.     LayoutMenus(menuStrip, vi, TAG_END); 
  102.     SetMenuStrip(w, menuStrip);
  103.  
  104.     /*
  105.     ** find the record menu item
  106.     */
  107.     record_item = menuStrip->FirstItem->NextItem->NextItem
  108.                 ->NextItem->NextItem->NextItem->NextItem;
  109.     return;
  110. }
  111.  
  112. int check_menu(int *class, int *code)
  113. /*
  114. ** FUNCTIONAL DESCRIPTION:
  115. **
  116. ** RETURN VALUE:
  117. **      description: TRUE if you should take an action, false if not
  118. **        data_type: int
  119. **
  120. ** ARGUMENTS:
  121. **
  122. **  class-
  123. **         description: Intuition message class
  124. **           data_type: pointer to int
  125. **              access: write only
  126. **
  127. **  code-
  128. **         description: Intuition message code
  129. **           data_type: pointer to int
  130. **              access: write only
  131. **
  132. ** DESIGN:
  133. **  ROUTINE
  134. **  : clear take_action, *class and *code
  135. **  : message = GetMsg(w->UserPort)
  136. **  : IF message is valid
  137. **  : : copy message class and code
  138. **  : : Reply to the message
  139. **  : : IF class = MENUPICK and code = invalid
  140. **  : : : take_action = FALSE
  141. **  : : ELSE
  142. **  : : : take_action = TRUE
  143. **  : : ENDIF
  144. **  : ENDIF
  145. **  : return take_action
  146. **  ENDROUTINE
  147. */
  148. {
  149.     auto int take_action = FALSE;
  150.     auto struct IntuiMessage *message;
  151.  
  152.     take_action 
  153.         = *class
  154.         = *code
  155.         = 0;
  156.  
  157.     message = (struct IntuiMessage *) GetMsg(w->UserPort);
  158.     if (message !=  NULL) 
  159.     {
  160.         *class  =  message->Class;
  161.         *code   =  message->Code;
  162.         ReplyMsg((struct Message *)message);
  163.         if ((MENUPICK == *class) && (MENUNULL == *code))
  164.         {
  165.             take_action = FALSE;
  166.         }
  167.         else
  168.         {
  169.             take_action = TRUE;
  170.         }
  171.     }
  172.     return take_action;
  173. }
  174.  
  175. void close_menu(void) 
  176. /*
  177. ** FUNCTIONAL DESCRIPTION:
  178. **  Closes the menu
  179. **
  180. */
  181. {
  182.     ClearMenuStrip(w);
  183.     FreeMenus(menuStrip);
  184.  
  185.     return;
  186. }
  187.  
  188. void clear_record(void)
  189. {
  190.     record_item->Flags &= ~CHECKED;
  191.     return;
  192. }
  193.